//
// codice di esempio che mostra come fare un fit di dati sperimentali
// x_i e y_i per cui y_i = f(x_i) nel caso in cui ci siano errori
// sperimentali non trascurabili sulle misure x_i oltre che sulle y_i
//
// il codice e' stato preso da
// http://root.cern.ch/root/html/examples/gerrors.C.html
// aggiungendo le istruzioni per fare il fit
//
// per eseguire, far partire Root e far partire con .x
// - shell> root <return>
// - root> .x fitErrorsX.cc
//

{
  gROOT->Reset();
  c1 = new TCanvas("c1","Fit on data with errors on x and y",200,10,700,500);
  
  c1->SetFillColor(42);
  c1->SetGrid();
  c1->GetFrame()->SetFillColor(21);
  c1->GetFrame()->SetBorderSize(12);
  
  //
  // si inizializzano 4 vettori:
  // x[] e ex[] contengono le misure x_i e i loro errori
  // y[] e ey[] contengono le misure y_i e i loro errori
  //
  Int_t n = 10;
  Float_t x[n]  = {-0.22, 0.05, 0.25, 0.35, 0.5, 0.61,0.7,0.85,0.89,0.95};
  Float_t y[n]  = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1};
  Float_t ex[n] = {.05,.1,.07,.07,.04,.05,.06,.07,.08,.05};
  Float_t ey[n] = {.8,.7,.6,.5,.4,.4,.5,.6,.7,.8};

  //
  // si crea un oggetto che rappresenta un grafico x-y con errori
  //
  gr = new TGraphErrors(n,x,y,ex,ey);
  gr->SetTitle("Fit with 4th order polinomial");
  gr->SetMarkerColor(4);
  gr->SetMarkerStyle(21);
  gr->Draw("ALP");

  //
  // si fittano i dati del grafico con un polinomio di 4o grado
  //
  gr->Fit("pol4");

  c1->Update();
}

